﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections.Specialized;
using Inmobiliaria.Presenters.ViewInterfaces;
using Inmobiliaria.UCControllers;
using Inmobiliaria.Base;
using Inmobiliaria.Services.Core.DTO;
using System.Net.Mail;
using System.Net;
using System.Text.RegularExpressions;
using System.IO;
using System.Web;

namespace Inmobiliaria.Presenters.WFPresenters
{
    public class RegistroInmuebleInmobiliariaPresenter : Presenter, IViewSINO
    {
        private IViewRegistroInmuebleInmobiliaria viewRegistroInmuebleInmobiliaria;
        RegistroInmuebleInmobiliariaUC _registroInmuebleInmobiliariaUC = new RegistroInmuebleInmobiliariaUC();

        public RegistroInmuebleInmobiliariaPresenter(IViewRegistroInmuebleInmobiliaria view)
            : base(view)
        {
            viewRegistroInmuebleInmobiliaria = view;
        }
        public override void InitView(NameValueCollection queryString)
        {
            viewRegistroInmuebleInmobiliaria.TipoInmueble = RegistroInmuebleParticularUC.CargarCombo();
            viewRegistroInmuebleInmobiliaria.Provincias = RegistroInmuebleParticularUC.CargarComboProvincias();
            string[] Habitacion = ValoresConstantes.Numeros;
            viewRegistroInmuebleInmobiliaria.Habitaciones = Habitacion;
            string[] Baño = ValoresConstantes.Numeros;
            viewRegistroInmuebleInmobiliaria.Baños = Baño;
            string[] Transaccion = ValoresConstantes.TipoTransaccion;
            viewRegistroInmuebleInmobiliaria.Transacciones = Transaccion;
        }
        public void CargarComboLocalidades()
        {
            RegistroInmuebleParticularUC _registroInmueble = new RegistroInmuebleParticularUC();
            int id = viewRegistroInmuebleInmobiliaria.Provincia;
            viewRegistroInmuebleInmobiliaria.Localidades = _registroInmueble.CargarComboLocalidades(id);

        }
        public void CargarComboBarrio()
        {
            RegistroInmuebleParticularUC _registroInmueble = new RegistroInmuebleParticularUC();
            int id = viewRegistroInmuebleInmobiliaria.Localidad;
            viewRegistroInmuebleInmobiliaria.Barrios = _registroInmueble.CargarComboBarrios(id);
        }
        public DtoInmuebleInmobiliaria InmuebleInmobiliaria()
        {
            DtoInmuebleInmobiliaria inmuebleInmobiliaria = new DtoInmuebleInmobiliaria();
            inmuebleInmobiliaria.CodigoInmobiliaria = viewRegistroInmuebleInmobiliaria.CodigoInmobiliaria;
            return inmuebleInmobiliaria;
        }
        public DtoInmuebleInmobiliaria Inmueble()
        {
            DtoInmuebleInmobiliaria inmueble = new DtoInmuebleInmobiliaria();
            //DtoInmobiliaria inmo = new DtoInmobiliaria();
            //inmueble.Email = inmo.Email;
            //inmueble.Email2 = inmo.Email2;
            //inmuebleInmobiliaria.CodigoInmobiliaria = viewRegistroInmuebleInmobiliaria.CodigoInmobiliaria;
            inmueble.Codigo = int.Parse(viewRegistroInmuebleInmobiliaria.CodigoInmobiliaria);
            inmueble.TipoInmueble = viewRegistroInmuebleInmobiliaria.tipoInmueble;
            inmueble.Transaccion = viewRegistroInmuebleInmobiliaria.Transaccion;
            inmueble.Provincia = viewRegistroInmuebleInmobiliaria.Provincia;
            inmueble.Localidad = viewRegistroInmuebleInmobiliaria.Localidad;
            inmueble.Barrio = viewRegistroInmuebleInmobiliaria.Barrio;
            inmueble.Calle = viewRegistroInmuebleInmobiliaria.Calle;
            inmueble.Altura = viewRegistroInmuebleInmobiliaria.Altura;
            inmueble.Lote = viewRegistroInmuebleInmobiliaria.Lote;
            inmueble.SuperficieCubierta = viewRegistroInmuebleInmobiliaria.SuperficieCubierta;
            inmueble.Habitaciones = viewRegistroInmuebleInmobiliaria.Habitacion;
            inmueble.Baños = viewRegistroInmuebleInmobiliaria.Baño;
            inmueble.Agua = viewRegistroInmuebleInmobiliaria.Agua;
            inmueble.Asfalto = viewRegistroInmuebleInmobiliaria.Asfalto;
            inmueble.Balcon = viewRegistroInmuebleInmobiliaria.Balcon;
            inmueble.Cloacas = viewRegistroInmuebleInmobiliaria.Cloacas;
            inmueble.Cocina = viewRegistroInmuebleInmobiliaria.Cocina;
            inmueble.Comedor = viewRegistroInmuebleInmobiliaria.Comedor;
            inmueble.Descripcion = viewRegistroInmuebleInmobiliaria.Descripcion;
            inmueble.Gas = viewRegistroInmuebleInmobiliaria.Gas;
            inmueble.Jardin = viewRegistroInmuebleInmobiliaria.Jardin;
            inmueble.Living = viewRegistroInmuebleInmobiliaria.Living;
            inmueble.Luz = viewRegistroInmuebleInmobiliaria.Luz;
            //planilla.Parrilla = viewRegistroInmueble.Parrilla;
            inmueble.Patio = viewRegistroInmuebleInmobiliaria.Patio;
            inmueble.Quincho = viewRegistroInmuebleInmobiliaria.Quincho;
            inmueble.TelefonoInmueble = viewRegistroInmuebleInmobiliaria.TelefonoInmueble;
            inmueble.Terraza = viewRegistroInmuebleInmobiliaria.Terraza;
            inmueble.ValorInmueble = viewRegistroInmuebleInmobiliaria.ValorInmueble;
            inmueble.Dolar = viewRegistroInmuebleInmobiliaria.Dolar;
            inmueble.Pesos = viewRegistroInmuebleInmobiliaria.Pesos;
            if (inmueble.Dolar != "" & inmueble.Pesos != "")
            {

                //viewRegistroInmueble.ShowError(Inmobiliaria.Presenters.Mensajes.OperacionExitosa);

            }
            if (inmueble.Dolar != "")
            {
                inmueble.TipoMoneda = inmueble.Dolar;
            }
            if (inmueble.Pesos != "")
            {
                inmueble.TipoMoneda = inmueble.Pesos;
            }
            inmueble.Foto1 = viewRegistroInmuebleInmobiliaria.FotoInmueble1;
            inmueble.Foto2 = viewRegistroInmuebleInmobiliaria.FotoInmueble2;
            inmueble.Foto3 = viewRegistroInmuebleInmobiliaria.FotoInmueble3;
            inmueble.Foto4 = viewRegistroInmuebleInmobiliaria.FotoInmueble4;
            inmueble.Foto5 = viewRegistroInmuebleInmobiliaria.FotoInmueble5;
            return inmueble;
        }
        public void ValidarCodigoInmobiliarioEntrante()
        {
            ValidarInmobiliariaPorCodigo(InmuebleInmobiliaria());
        }
        public void ValidarInmobiliariaPorCodigo(DtoInmuebleInmobiliaria inmuebleInmobiliaria)
        {
            DtoInmuebleInmobiliaria DtoInmuebleInmobiliaria = new DtoInmuebleInmobiliaria();
            string NombreInmobiliaria = BuscarInmueblePorCodigo(inmuebleInmobiliaria);
            if (NombreInmobiliaria == null)
            {
                viewRegistroInmuebleInmobiliaria.ShowQuestion(Inmobiliaria.Presenters.Mensajes.PreguntaInmobiliaria);
                return;
            }
            else
            {
                viewRegistroInmuebleInmobiliaria.InmuebleEncontrado = NombreInmobiliaria;
            }
        }
        public string BuscarInmueblePorCodigo(DtoInmuebleInmobiliaria inmuebleInmobiliaria)
        {
            return _registroInmuebleInmobiliariaUC.BuscarInmobiliariaPorCodigo(inmuebleInmobiliaria.CodigoInmobiliaria);
        }
        public void RegistrarInmuebleInmobiliaria()
        {
            RegistraInmueble(Inmueble());
        }
        private void RegistraInmueble(DtoInmuebleInmobiliaria dtoInmuebleInmobiliaria)
        {
            registrarInmueblePorInmobiliaria(dtoInmuebleInmobiliaria);
        }
        private void registrarInmueblePorInmobiliaria(DtoInmuebleInmobiliaria dtoInmuebleInmobiliaria)
        {

            _registroInmuebleInmobiliariaUC.GuardarInmuebleInmobiliaria(dtoInmuebleInmobiliaria);

            string email = BuscarEmail(dtoInmuebleInmobiliaria);
            viewRegistroInmuebleInmobiliaria.ShowMessage(Inmobiliaria.Presenters.Mensajes.PersonaInsertadoExitosamente);
            if (email != "" & email != null)
            {
                dtoInmuebleInmobiliaria.Email = email;
                MandarEmail(dtoInmuebleInmobiliaria);
            }
        }
        private string BuscarEmail(DtoInmuebleInmobiliaria inmueble)
        {
            return _registroInmuebleInmobiliariaUC.BuscarEmail(inmueble);
        }
        private void MandarEmail(DtoInmuebleInmobiliaria dtoInmuebleInmobiliaria)
        {
            string CuentaPropia = "<h1><b><p><Font color = Red>Para finalizar su publicación usted debe realizar un deposito bancario a la siguiente cuenta corriente.</Font></p></b></h1>" +
                "<h2><Font Size = 5>Banco: PATAGONIA</Font></h2>" +
                "<h3><Font Size = 5>Titular de la cuenta: IMOLI EL CAPO</Font> </h3>" +
                "<h4><Font Size = 5>Caja de ahorro en pesos: 22222222222</Font></h4>" +
                "<h5><Font Size = 5>CBU: 000000000000</Font></h5>" +
                "<h6><Font Size = 5>Monto a depositar: $100</Font></h6>";

            string PagoRealizado = "<h1><b><p><Font color = Red>Una vez que haya realizado el deposito responda el siguiente email completando los siguiente datos.</Font></p></b></h1>" +
                "<h2><Font Size = 5>Nro de transacción o Nro de Comprobante:</Font></h2>" +
                 "<h3><Font Size = 5>Fecha de Pago:</Font></h3>" +
                 "<h4><Font Size = 5>Importe Abonado:</Font></h4>" +
                 "<h5><Font Size = 5>Sucursal:</Font></h5>";

            int codigoInmueble = BuscarCodigoInmueble(dtoInmuebleInmobiliaria.Codigo);
            string Email = dtoInmuebleInmobiliaria.Email;
            //Configuración del Mensaje
            MailMessage mail = new MailMessage();
            SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");
            //Especificamos el correo desde el que se enviará el Email y el nombre de la persona que lo envía
            mail.From = new MailAddress("leoimoli@gmail.com", "Leonel", Encoding.UTF8);
            //Aquí ponemos el asunto del correo
            mail.Subject = " SU CÓDIGO DE INMUEBLE ES '" + codigoInmueble + "' PASOS A SEGUIR";
            //Aquí ponemos el mensaje que incluirá el correo
            mail.Body = "'" + CuentaPropia + "''" + PagoRealizado + "'";
            mail.IsBodyHtml = true;
            //Especificamos a quien enviaremos el Email, no es necesario que sea Gmail, puede ser cualquier otro proveedor
            mail.To.Add(Email);
            //Si queremos enviar archivos adjuntos tenemos que especificar la ruta en donde se encuentran
            // mail.Attachments.Add(new Attachment(@"C:\Documentos\carta.docx"));
            //Configuracion del SMTP
            SmtpServer.Port = 587; //Puerto que utiliza Gmail para sus servicios
            SmtpServer.Timeout = 900000;
            //Especificamos las credenciales con las que enviaremos el mail
            SmtpServer.Credentials = new System.Net.NetworkCredential("leoimoli@gmail.com", "leo33244793");
            //SmtpServer.Host = "smtp.gmail.com";
            SmtpServer.EnableSsl = true;
            try
            {
                SmtpServer.Send(mail);
            }
            catch (Exception ex)
            {
            }
        }
        private int BuscarCodigoInmueble(int CodigoInmobiliaria)
        {
            return _registroInmuebleInmobiliariaUC.BuscarCodigoInmueble(CodigoInmobiliaria);
        }
        public void Si()
        {
            HttpContext.Current.Response.Redirect("RegistrarInmobiliariaWF.aspx");
        }
        public void No()
        {
            HttpContext.Current.Response.Redirect("PublicarInmobiliariaInmueblesWF.aspx");
        }
        public void Volver()
        {
            HttpContext.Current.Response.Redirect("HomeWF.aspx");
        }
    }
}
